//
//  UIButtonSwift.swift
//  Study-code
//
//  Created by quanhao huang on 2021/11/15.
//

import Foundation
import UIKit

/**
 UIButton在iOS中是按钮，一般用于做用户交互，由于美观性一般的按钮我们都是使用的自定义按钮
 按钮是一个很复杂的控件，它有多种状态以及交互方式，比如按钮按下，按钮拖拽，按钮触摸，触摸后抬起，以及按钮普通的样子，按下的样子，抬起的样子
 
 总结：按钮一般分为三个状态 普通 按下 选中， 英文对应normal highlighted selected，三种状态的文字图片以及文字颜色都可以各不相同
 */

class CustomUIButton: NSObject {
    
    func createUI() {
        //新建一个按钮(custom的意思就是自定义，因为美观问题一般都不适用系统按钮而是自定义按钮)
        let button = UIButton(type: .custom)
        //设置位置
        button.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        //设置按钮各个属性的状态
        button.setImage(UIImage.init(named: "普通图片"), for: .normal)//普通状态下的按钮
        button.setImage(UIImage.init(named: "高亮下边的图片"), for: .highlighted)//高亮状态的图片，按钮按下时就是高亮状态
        button.setImage(UIImage.init(named: "选中图片"), for: .selected)//按钮如果被选中，就显示这个图片
        button.setTitle("普通文字", for: .normal)//普通状态下的文字
        button.setTitle("选中文字", for: .highlighted)//高亮状态下的文字
        button.setTitle("高亮文字", for: .selected)//选中状态下的文字
        button.setTitleColor(.red, for: .normal)//普通状态下的文字颜色
        button.setTitleColor(.yellow, for: .highlighted)//高亮状态下的文字颜色
        button.setTitleColor(.black, for: .selected)//选中状态下的文字颜色
        //按钮如何被选中呢？
        button.isSelected = true//这样就是选中了，当然了，false就不是选中了
        //按钮是否被允许点击(为什么会有这种方法呢，因为有些需求下按钮虽然在那里但是并不允许用户去点击，比如密码跟账号没有输入完成前，不允许用户点击按钮，这个时候按钮的enable就可以为false，这种情况下按钮只可以看到，但是却不能点击)
        button.isEnabled = true
        //按钮方法(注意看后边的touchUpInside，这是一个枚举，代表了交互方式touchUpInside为按下并且抬起的交互方式，按钮还有很多很多种方法触发)
        button.addTarget(self, action: #selector(buttonClick), for: .touchUpInside)
        //写两个例子
        button.addTarget(self, action: #selector(buttonDown), for: .touchDown)
        button.addTarget(self, action: #selector(buttonDragEnter), for: .touchDragEnter)
    }
    
    @objc func buttonClick() {
        print("按钮被点击了")
    }
    
    @objc func buttonDown() {
        print("按下按钮了")
    }
    
    @objc func buttonDragEnter() {
        print("手指滑到了按钮位置")//这种一般是手指在滑动屏幕的过程中碰到了按钮，按钮做出一些反应，在其他的系统中，它的状态学名是hover
    }
}
